package com.pai4j.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 互动消息类型枚举
 * 用于区分不同的互动行为类型，便于前端分类展示
 * 
 * @author PAI4J Team
 * @date 2025-10-21
 */
@Getter
@AllArgsConstructor
public enum InteractionMessageTypeEnum {
    
    /**
     * 点赞：用户点赞了你的内容（文章、动态等）
     */
    LIKE(1, "点赞", "点赞了你的"),
    
    /**
     * 评论：用户评论了你的内容
     */
    COMMENT(2, "评论", "评论了你的"),
    
    /**
     * 回复：用户回复了你的评论
     */
    REPLY(3, "回复", "回复了你的评论"),
    
    /**
     * 收藏：用户收藏了你的内容
     */
    COLLECT(4, "收藏", "收藏了你的"),
    
    /**
     * 浏览：用户浏览了你的内容（可用于统计，一般不发送通知）
     */
    VIEW(5, "浏览", "浏览了你的"),
    
    /**
     * 分享：用户分享了你的内容
     */
    SHARE(6, "分享", "分享了你的"),
    
    /**
     * 关注：用户关注了你
     */
    FOLLOW(7, "关注", "关注了你"),
    
    /**
     * 取消关注：用户取消关注了你（一般不发送通知）
     */
    UNFOLLOW(8, "取消关注", "取消关注了你"),
    
    /**
     * 支付：用户购买了你的内容/课程
     */
    PAY(9, "支付", "购买了你的"),
    
    /**
     * 推荐：用户推荐了你的内容
     */
    RECOMMEND(10, "推荐", "推荐了你的"),
    
    /**
     * 置顶评论：管理员/作者置顶了你的评论
     */
    TOP_COMMENT(11, "置顶评论", "置顶了你在"),
    
    /**
     * 系统通知：平台系统消息（公告、活动、维护等）
     */
    SYSTEM(99, "系统通知", "系统通知"),
    
    /**
     * 其他：未分类的互动行为
     */
    OTHER(0, "其他", "互动了你的");
    
    /**
     * 消息类型代码
     */
    private final Integer code;
    
    /**
     * 消息类型名称
     */
    private final String name;
    
    /**
     * 行为描述（用于构建通知消息）
     */
    private final String actionDesc;
    
    /**
     * 根据代码获取枚举
     * 
     * @param code 消息类型代码
     * @return 枚举值，找不到返回 OTHER
     */
    public static InteractionMessageTypeEnum fromCode(Integer code) {
        if (code == null) {
            return OTHER;
        }
        for (InteractionMessageTypeEnum type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        return OTHER;
    }
    
    /**
     * 根据行为类型名称获取枚举（兼容 ResourceBehaviorConstants.BehaviorType）
     * 
     * @param behaviorTypeName 行为类型名称（LIKE、COMMENT、COLLECT等）
     * @return 枚举值，找不到返回 OTHER
     */
    public static InteractionMessageTypeEnum fromBehaviorType(String behaviorTypeName) {
        if (behaviorTypeName == null || behaviorTypeName.isEmpty()) {
            return OTHER;
        }
        try {
            // 直接匹配枚举名称
            return valueOf(behaviorTypeName.toUpperCase());
        } catch (IllegalArgumentException e) {
            // 找不到匹配的枚举，返回 OTHER
            return OTHER;
        }
    }
}
